/**

给定二叉树的根节点 root，找出存在于不同节点 A 和 B 之间的最大值 V，其中 V = |A.val - B.val|，且 A 是 B 的祖先。

（如果 A 的任何子节点之一为 B，或者 A 的任何子节点是 B 的祖先，那么我们认为 A 是 B 的祖先）

 
输入：[8,3,10,1,6,null,14,null,null,4,7,13]
输出：7
解释： 
我们有大量的节点与其祖先的差值，其中一些如下：
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3
在所有可能的差值中，最大值 7 由 |8 - 1| = 7 得出。



 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void maxAncestorDiffHelper(TreeNode* node,int maxValueOfPath,int minValueofPath,int & maxAbsValue)
    {
        if(node==0)
            return;
        maxValueOfPath = node->val > maxValueOfPath ? node->val:maxValueOfPath;
        minValueofPath = node->val < minValueofPath ? node->val:minValueofPath;
        maxAbsValue = maxValueOfPath-minValueofPath >maxAbsValue?maxValueOfPath-minValueofPath :maxAbsValue;

        maxAncestorDiffHelper(node->left, maxValueOfPath, minValueofPath, maxAbsValue);
        maxAncestorDiffHelper(node->right, maxValueOfPath, minValueofPath, maxAbsValue);

    }
    int maxAncestorDiff(TreeNode* root) 
    {
        int maxAbsValue = 0;
        maxAncestorDiffHelper(root,INT_MIN,INT_MAX,maxAbsValue);
        return maxAbsValue;
    }
};